﻿// 5075. 整数排序.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <algorithm>
using namespace std;
/*
https://www.acwing.com/problem/content/5078/

给定若干个整数，请你将这些整数按照位数由大到小进行排序，如果位数相同，则按照整数本身由小到大进行排序。

输入格式
共一行，包含若干整数。

输出格式
共一行，输出按要求排序后的整数。

数据范围
输入整数数量范围 [1,106]。
输入整数取值范围 [−109,109]。

输入样例1：
10 -3 1 23 89 100 9 -123
输出样例1：
-123 100 10 23 89 -3 1 9
输入样例2：
1 -2 12
输出样例2：
12 -2 1
*/

const int N = 1000010;
struct NUM {
	int len, t;

}nums[N];

void clac(struct NUM a[], int len) {
	for (int i = 0; i < len; i++) {
		int t = a[i].t;
		if (t == 0) a[i].len++;
		while (t) {
			t /= 10;
			a[i].len++;
		}
	}
}

bool cmp(const struct NUM& a, const struct NUM& b) {
	if (a.len > b.len) 
		return true;
	else if (a.len == b.len) {
		return a.t < b.t;
	}
	return false;
}

int main()
{
	int idx = 0;
	while (cin >> nums[idx].t) {
		idx++;
	}
	clac(nums, idx);
	sort(nums,nums+idx,cmp);

	for (int i = 0; i < idx; i++) {
		cout << nums[i].t << " ";
	}
}

 